<html>
  <head>
    <title>运行时</title>
  </head>
  <body>
    <script>
       /*
                三、运行时 （RunTime）

                        runtime 不是运行在电脑开发环境下的，而是运行在真正的终端上。

                        uniApp 在每个平台 Web、Android App、iOS App、各家小程序） 都有各自的 runtime. 这是一个比较庞大的工程。

                            1、小程序端：

                                     在小程序端，uni-app的runtime，主要是一个小程序版的vue runtime，页面路由、组件、api等方面基本都是转义。

                            2、Web端：

                                     在web端，uni-app的runtime相比普通的vue项目，多了一套ui库、页面路由框架、和uni对象（即常见API封装）

                            3、App端：

                                    在App端，uni-app的runtime更复杂，可以先简单理解为DCloud也有一套小程序引擎，
                                    
                                    打包app时将开发者的代码和DCloud的小程序打包成了apk或ipa。
                                    
                                    当然，事实上DCloud确实有小程序引擎产品，供原生应用实现小程序化，详见


                        uniApp runtime 包括3个部分：  基础框架、组件、Api

                              1、基础框架：

                                    ①、 包括语法、数据驱动、全局文件、应用管理、页面管理、js引擎、渲染和排版引擎等

                                    ②、 在web 和 小程序上，不需要 uni-app 提供js引擎和排版引擎，直接使用浏览器和小程序的即可。但在 app上需要uni-app提供。

                                    ③、 App的js引擎： App-Android上，uni-app 的js 引擎是v8引擎。

                                                    App-ios是 jscore引擎。

                                    ④、 App 的渲染引擎：

                                                    同时提供了2套渲染引擎， .vue页面文件由 webview渲染，原理与小程序相同；

                                                    .nvew页面文件由原生渲染，原理与 react native相同。

                                                    开发者可以根据需要自主选择渲染引擎。

                              2、组件：

                                     ①、runtime 中包括的组件只有基础组件如 <view>、<button>等。扩展组件不包含在uni-app的 runtime中，而是下载到用户的项目代码中。（这些组件都是vue组件）

                                     ②、为了降低开发者的学习成本，uni-app的内置基础组件命名规范与小程序基本相同。

                                     ③、这几十个组件不管在哪个平台，已经被处理为均有一致表现。

                                     ④、在小程序端，uni-app基础组件会直接转义为小程序的内置组件。
                                      
                                        在小程序的runtime中不占体积。

                                     ⑤、在web和 android、ios端，这几十个组件都在uni-app的 runtime 中，会占用一定体积，相当于内置了一套ui库。

                                     ⑥、组件的扩展：

                                             有了几十个基础组件，大多数扩展组件也都是基于这些基础组件封装的。

                                             比如官方提供的扩展UI库 uni ui.

                                             在web 平台， for web 的各种ui库（elementUI）也可以使用，但这些库由于操作了DOM，无法跨端在 app 和 小程序中使用。

                                             在App平台，uni-app也支持使用原生编程语言类自行扩展原生组件，比如原生的地图、ar等。

                                             uni-app同时支持支持将"微信自定义组件"运行到微信小程序、web、app 这3个平台。注意微信自定义组件不是vue组件。

                            
                              3、API：

                                    ①、uni-app runtime内置了大量"常见的"、"跨端的" API，比如网络请求(uni.request)、读取存储(uni.getStorage)

                                    ②、同时 uni-app 不限制各端原生的API调用。

                                            开发者可以在uni-app 框架中无限制的调用该平台所有能使用的API。

                                            即在小程序平台，小程序的所有API都可以使用；在web平台，小程序的所有API都可以使用；

                                            在web平台，浏览器的所有API都可以使用；在IOS和 Android平台，os的所有API都可以使用。

                                    ③、也就是说，使用uni-app的标准API，可以跨端使用。但对于不跨段的部分，仍可以调用该端的专有API。

                                            由于常见的API都已经被封装内置，所以日常开发时，开发者只需关注uni标准API，

                                            当需要调用特色端能力时在"条件编译"里编写特色API调用代码。

                                    ④、ext API(额外API)：

                                            web 和 app 的 runtime 体积不小，如果把小程序所有API等内置进去会让开发者的最终应用体积变大。

                                            所以有部分不常用的API被剥离为 ext API。虽然仍然是"uni."开头，但需要单独下载插件到项目中。

                                    ⑤、小程序平台：  

                                            uni对象会转为小程序的自由对象，比如在微信小程序平台，编写uni.request 等同于 wx.request.

                                            那么所有"wx."开头的api都可以这样使用。

                                    ⑥、web平台： window、dom 等浏览器专用API仍可以使用。

                                    ⑦、app平台：

                                                除了uni. 的API，还可以使用 plus.的API、Native.js,以及通过uts编写的原生插件，

                                                或者使用 java 和 objectC 编写的原生插件。这些插件调用os的API并封装给js使用。

                                    ⑧、由于历史传承，DCloud在开发app时有： 5+App、wap2app、uni-app 等3中模式。

                                                这3中模式的runtime在底层能力上是通用的，所有uni-app 可以嗲用5+（也就是plus.xxx）的API。

                                                虽然都可以使用5+的系统能力，但uni-app的逻辑层运行在js层，渲染层是webview 和 原生 nvue双选。

                                                而5+不区分逻辑层和渲染层，全部都运行在webview里，在性能上 5+ 不及uni-app.

                                   DCloud还提供了"插件市场"，大多数用得着的组件和API都已经有了现成的插件。
           */
    </script>
  </body>
</html>